package com.lecture.javamode.factory.method;

public class RuleConfigSource {

    //这样实现工厂方法和简单工厂非常类似，
    // 所以我们需要为工厂类再创建一个简单工厂，也就是工厂的工厂，用来创建工厂类对象
    public RuleConfig load(String ruleConfigFilePath) {
        String ruleConfigFileExtension = getFileExtension(ruleConfigFilePath);
        IRuleConfigParserFactory parserFactory = null;
        if ("json".equalsIgnoreCase(ruleConfigFileExtension)) {
            parserFactory = new JsonRuleConfigParserFactory();
        } else if ("xml".equalsIgnoreCase(ruleConfigFileExtension)) {
            //parserFactory = new XmlRuleConfigParser();
        } else if ("yaml".equalsIgnoreCase(ruleConfigFileExtension)) {
           // parserFactory = new YamlRuleConfigParser();
        } else if ("properties".equalsIgnoreCase(ruleConfigFileExtension)) {
            //parserFactory = new PropertiesRuleConfigParser();
        } else {
            throw new RuntimeException("");
        }
        IRuleConfigParser parser = parserFactory.createParser();
        String configText = "";
        return parser.parser(configText);
    }

    //优化后的代码
    public RuleConfig load2(String ruleConfigFilePath) {
        //使用工厂的工厂
        String ruleConfigFileExtension = getFileExtension(ruleConfigFilePath);
        IRuleConfigParserFactory parserFactory = RuleConfigParserFactoryMap.createParser(ruleConfigFileExtension);
        if (parserFactory == null) {
            return null;
        }
        IRuleConfigParser parser = parserFactory.createParser();
        String configText = "";
        return parser.parser(configText);
    }

    private String getFileExtension(String filePath) {
        //解析文件后缀
        return "json";
    }
}
